package com.rzcode.coinex.kernel.dao.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.rzcode.coinex.kernel.common.enums.AdminModuleEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 管理员访问日志实体类，用于记录管理员的所有操作日志。
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "admin_access_log")
public class AdminAccessLog implements Serializable {

    /**
     * 日志ID，自增长的唯一标识符。
     */
    @ApiModelProperty(value = "日志ID", required = true, example = "1")
    private Long id;

    /**
     * 管理员ID，与管理员实体关联。
     */
    @ApiModelProperty(value = "管理员ID", required = true, example = "1")
    private Long adminId;

    /**
     * 管理员名称，非数据库字段，用于展示。
     */
    @ApiModelProperty(value = "管理员名称", example = "超级管理员")
    private String adminName;

    /**
     * 请求URI，即请求的资源路径。
     */
    @ApiModelProperty(value = "请求URI", required = true, example = "/admin/users")
    private String uri;

    /**
     * 操作模块，通常是一个枚举值。
     */
    @ApiModelProperty(value = "操作模块", example = "USER_MANAGEMENT")
    private AdminModuleEnum module;

    /**
     * 具体的操作描述。
     */
    @ApiModelProperty(value = "具体操作", required = true, example = "查看用户列表")
    private String operation;

    /**
     * 访问IP地址。
     */
    @ApiModelProperty(value = "访问IP", required = true, example = "192.168.1.1")
    private String accessIp;

    /**
     * 访问方法，如GET、POST等。
     */
    @ApiModelProperty(value = "访问方法", required = true, example = "GET")
    private String accessMethod;

    /**
     * 访问时间，自动记录创建时间。
     */
    @ApiModelProperty(value = "访问时间", required = true, example = "2023-01-01 12:00:00")
    private LocalDateTime accessTime;
}

